คำอธิบายปัญหา

ต้นไม้ค้นหาแบบไบนารีทบทวน

งานของคุณคือการสร้างต้นไม้ค้นหาแบบไบนารีที่รองรับการทำงานหลัก 4 อย่าง

  • จำนวนการดำเนินการคือ $N$ โดยที่ $1 \le N \le 2 \cdot 10^5$
  • เพิ่มค่า $k$: เพิ่มคีย์จำนวนเต็ม $k$ เข้าไปในต้นไม้ค้นหาแบบไบนารี หาก $k$ มีอยู่แล้ว การดำเนินการนี้จะไม่ทำอะไร
  • ค้นหา $k$: ค้นหาคีย์ $k$ หากพบ จะแสดงผลเป็น 'true' ถ้าไม่พบ จะแสดงผลเป็น 'false'
  • ตัวถัดไปของ $k$: หาคีย์ถัดไปของ $k$ — คือคีย์ที่เล็กที่สุดในต้นไม้ที่มากกว่า $k$ อย่างชัดเจน หากไม่มีให้แสดงผลเป็น 'null'
  • ตัวก่อนหน้าของ $k$: หาคีย์ก่อนหน้าของ $k$ — คือคีย์ที่ใหญ่ที่สุดในต้นไม้ที่น้อยกว่า $k$ อย่างชัดเจน หากไม่มีให้แสดงผลเป็น 'null'
  • สมมติฐานสำคัญ: สำหรับคำถามเกี่ยวกับตัวถัดไปและตัวก่อนหน้า คีย์ $k$ จะต้องมีอยู่ในต้นไม้เสมอ